package com.example.springbooteasycode.zjrc;

import java.util.Arrays;

public class ConversionUtils {

    // 示例用法
    public static void main(String[] args) {
        // 示例：字符串 → 十进制 → 十六进制 → 二进制
        String str = "1A";
        int decimal = stringToDecimal(str);      // 255
        String hex = decimalToHex(decimal);      // "FF"
        String binary = decimalToBinary(decimal); // "11111111"

        System.out.println("字符串: " + str);
        System.out.println("十进制: " + decimal);
        System.out.println("十六进制: " + hex);
        System.out.println("二进制: " + binary);

        // ascii码转字节数组
        String ascii = "00013570";
        byte[] bytes = ascii.getBytes();
        // bytes转十六进制字符串
        String hexString = bytesToHexString(bytes);
        System.out.println("字节数组：" + Arrays.toString(bytes));
        System.out.println("十六进制字符串：" + hexString);

    }


    // 字符串 → 十进制
    public static int stringToDecimal(String str) {
        return Integer.parseInt(str);
    }

    // 十进制 → 字符串
    public static String decimalToString(int decimal) {
        return String.valueOf(decimal);
    }

    // 十进制 → 十六进制
    public static String decimalToHex(int decimal) {
        return Integer.toHexString(decimal).toUpperCase();
    }

    // 十六进制 → 十进制
    public static int hexToDecimal(String hex) {
        return Integer.parseInt(hex, 16);
    }

    // 十进制 → 二进制
    public static String decimalToBinary(int decimal) {
        return Integer.toBinaryString(decimal);
    }

    // 二进制 → 十进制
    public static int binaryToDecimal(String binary) {
        return Integer.parseInt(binary, 2);
    }

    // 十六进制 → 二进制
    public static String hexToBinary(String hex) {
        int decimal = hexToDecimal(hex);
        return decimalToBinary(decimal);
    }

    // 二进制 → 十六进制
    public static String binaryToHex(String binary) {
        int decimal = binaryToDecimal(binary);
        return decimalToHex(decimal);
    }

    // 字符串 → 十六进制（字节数组）
    public static byte[] stringToBytes(String str) {
        return str.getBytes();
    }

    // 十六进制（字节数组） → 字符串
    public static String bytesToString(byte[] bytes) {
        return new String(bytes);
    }

    // 字节数组 → 十六进制字符串
    public static String bytesToHexString(byte[] bytes) {
        StringBuilder result = new StringBuilder();
        for (byte b : bytes) {
            result.append(String.format("%02X", b));
        }
        return result.toString();
    }

    // 十六进制字符串 → 字节数组
    public static byte[] hexStringToBytes(String hexString) {
        int len = hexString.length();
        byte[] bytes = new byte[len / 2];
        for (int i = 0; i < len; i += 2) {
            bytes[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)
                    + Character.digit(hexString.charAt(i+1), 16));
        }
        return bytes;
    }

}
